package nmd;

/**
 * 主类 Main2，实现 Runnable 接口，用于演示线程中断机制。
 *
 * @author [你的名字]
 */
public class Main2 implements Runnable {

    @Override
    public void run() {
        try {
            System.out.println("in run() - 将运行 work2() 方法");
            work2();
            System.out.println("in run() - 从 work2() 方法回来");
        } catch (InterruptedException x) {
            System.out.println("in run() - 中断 work2() 方法");
            return;
        }
        System.out.println("in run() - 休眠后执行");
        System.out.println("in run() - 正常离开");
    }

    /**
     * 模拟长时间运行的任务，支持线程中断。
     *
     * @throws InterruptedException 如果线程被中断
     */
    public void work2() throws InterruptedException {
        while (!Thread.currentThread().isInterrupted()) {
            System.out.println("C isInterrupted()=" + Thread.currentThread().isInterrupted());
            Thread.sleep(2000);
            System.out.println("D isInterrupted()=" + Thread.currentThread().isInterrupted());
        }
        System.out.println("work2() - 线程被中断，退出循环");
    }
    /**
     * 模拟计算密集型任务，支持线程中断。
     *
     * @throws InterruptedException 如果线程被中断
     */
    public void work() throws InterruptedException {
        while (!Thread.currentThread().isInterrupted()) {
            for (int i = 0; i < 100000; i++) {
                int j = i * 2;
            }
            System.out.println("A isInterrupted()=" + Thread.currentThread().isInterrupted());
            if (Thread.interrupted()) {
                System.out.println("B isInterrupted()=" + Thread.currentThread().isInterrupted());
                throw new InterruptedException();
            }
        }
    }

    public static void main(String[] args) {
        Main2 si = new Main2();
        Thread t = new Thread(si);
        t.start();

        try {
            Thread.sleep(2000);
        } catch (InterruptedException x) {
            System.out.println("in main() - 主线程被中断");
        }

        System.out.println("in main() - 中断其他线程");
        t.interrupt();
        System.out.println("in main() - 离开");
    }
}